package com.maoxs.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class Gen {
    /**
     * 代码生成器
     */
    public void generatorTest() {
        //----------------- 全局配置
        GlobalConfig config = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        config.setActiveRecord(true)    //----------------- 是否支持 AR
                .setAuthor("fulin")    //----------------- 作者
                .setOutputDir(projectPath + "/springboot-mybatisplus/src/main/java")  //----------------- 生成路径
                .setFileOverride(true)  //----------------- 文件覆盖(全新文件)
                .setIdType(IdType.AUTO) //----------------- 主键策略
                .setServiceName("%sService")    //----------------- 设置生成的 service 接口的名字首字母是否有I（IEmployeeService）
                //----------------- 当前为没有I，默认有I
                .setBaseResultMap(true) //----------------- SQL 映射文件
                .setBaseColumnList(true); //----------------- SQL 片段

        //----------------- 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MARIADB)
                .setDriverName("com.mysql.jdbc.Driver")
                .setUrl("org.mariadb.jdbc.Driver")
                .setUsername("root")
                .setPassword("123456");

        //----------------- 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true) //----------------- 全局大写命名
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setNaming(NamingStrategy.underline_to_camel)   //----------------- 数据库表映射到实体的命名策略(下划线驼峰命名法)
                //.setTablePrefix("tbl_") //----------------- 数据库表的前缀
                .setInclude("user");

        //----------------- 包名策略配置(自动生成包)
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.maoxs.base")
                .setMapper("mapper")
                .setEntity("entity")
                .setService("service")
                .setController("controller");
        //.setServiceImpl("service.impl"); 会自动生成 impl，可以不设定

        //----------------- 整合配置(所有配置包含进来)
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        //----------------- 执行代码生成
        autoGenerator.execute();

    }
}
